package app

// ----------------------------------------------------------------------------
// 文件：app/main.go
// 描述：应用主程序
// 版本：0.1
// 作者：lg
// 日期：2025-01-18
// 修改：2025-01-18 0.1 lg  新增版本
//
// ----------------------------------------------------------------------------
import (
	"fmt"
	"odm/com"
	"odm/model"
	"odm/router"
	"os/exec"

	"github.com/kataras/iris/v12"
	"github.com/spf13/viper"
)

type App struct {
	Server *iris.Application
	Config *viper.Viper
}

func New(conf *viper.Viper) *App {
	// 创建实例
	return &App{
		Server: iris.New(),
		Config: conf,
	}
}

func (app *App) Run() {
	// 保存进程号
	if err := savePid(); err != nil {
		fmt.Println(err)
		return
	}
	defer removePid()

	config := app.Config
	server := app.Server
	// 加载中间件
	server.Use(com.Middleware())
	// 加载路由
	router.SetupRouter(server, config)
	// 加载数据库
	model.SetupDb(config.GetString("data.file"))
	// 加载静态库
	server.HandleDir("/", config.GetString("server.staticPath"))
	// 启动服务
	app.Server.Listen(":" + config.GetString("server.port"))
}

func Stop() {
	pid, err := getPid()
	if err != nil {
		fmt.Printf("error:[%s]\n", err.Error())
		return
	}
	cmd := exec.Command("kill", fmt.Sprint(pid))
	if err := cmd.Run(); err != nil {
		fmt.Printf("error:[%s]\n", err.Error())
		return
	}
	fmt.Println("odm server stop success")
}
